/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package adp1;

import java.util.List;
import java.util.Set;

/**
 *
 * AD Praktikum Aufgabe 1-1
 * Interface for the ADT Permutation
 * 
 */
public interface Permutation {
	//
    // creators: see factory class
	//

	
	//
    // accessors:
	//
	
    // Get value of permutation image at i
    public int sigma(int i) throws IllegalArgumentException;

    // Get permutation as list
    public List<Integer> image();

    // Get cycle of i of permutation
    public List<Integer> cycle(int i) throws IllegalArgumentException;

	// Get permutation as set of cycles
    public Set<List<Integer>> allCycles();

    // Fixed Points of Permutation
    public Set<Integer> fixedPoints();
    
    // string representation as list of integer
    public String toImageNotationString();

    // string representation as list of cylces
    public String toCycleNotationString();
    // optional:
    // aka Sn class
    public int size();

    
    
    //
    // producers:
    //
    
	// Compose this permuation with permutation p
    public Permutation compose(Permutation p) throws NullPointerException, IllegalArgumentException;

    // Get inverse of permutation
    public Permutation inverse();


}
